]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
KeyboardStatus: disambiguate duplicate short descriptions
authorGiovanni Campagna <gcampagna@src.gnome.org>
Sun, 15 May 2011 17:31:02 +0000 (19:31 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Fri, 26 Aug 2011 14:52:58 +0000 (16:52 +0200)
If two layouts have the same short description (for example, english
(US) and english (dvorak)), add a subscript for disambiguating
among them.

https://bugzilla.gnome.org/show_bug.cgi?id=650128

js/ui/status/keyboard.js

index 1db0d8286e78dbc3aa6d240a5414d430f797ada3..7b425a43492edce25fa5b099c8593ec877f5cbb8 100644 (file)
@@ -79,6 +79,28 @@ XKBIndicator.prototype = {
         });
     },
 
+    _adjust_group_names: function(names) {
+        // Disambiguate duplicate names with a subscript
+        // This is O(N^2) to avoid sorting names
+        // but N <= 4 so who cares?
+
+        for (let i = 0; i < names.length; i++) {
+            let name = names[i];
+            let cnt = 0;
+            for (let j = i + 1; j < names.length; j++) {
+                if (names[j] == name) {
+                    cnt++;
+                    // U+2081 SUBSCRIPT ONE
+                    names[j] = name + String.fromCharCode(0x2081 + cnt);
+                }
+            }
+            if (cnt != 0)
+                names[i] = name + '\u2081';
+        }
+
+        return names;
+    },
+
     _sync_config: function() {
         this._showFlags = this._config.if_flags_shown();
         if (this._showFlags) {
@@ -101,7 +123,7 @@ XKBIndicator.prototype = {
         for (let i = 0; i < this._labelActors.length; i++)
             this._labelActors[i].destroy();
 
-        let short_names = this._config.get_short_group_names();
+        let short_names = this._adjust_group_names(this._config.get_short_group_names());
 
         this._selectedLayout = null;
         this._layoutItems = [ ];